/* 
 * File:   ProblemaPoblacionL.cpp
 * Author: jorgeorm
 * 
 * Created on 13 de enero de 2012, 03:48 PM
 */

#include "ProblemaPoblacionL.h"
#include "Derivada_Lagrange.h"
#include <cstdio>
#include <cmath>
#include <stdlib.h>

using namespace std;

ProblemaPoblacionL::ProblemaPoblacionL(long double xs[],int tamDats, int anhios[]):Derivada_Lagrange(xs,tamDats){
    
//    Init del array para mostrar las opciones
//    
    this->arrayAnhios= new int[tamDats];
    for (int i=0;i<tamDats;i++){
        this->arrayAnhios[i]=anhios[i];
        this->ptr_arrayYs[i]=funcion(ptr_arrayXs[i]);
//        cout<<"i: "<<i<<"ptr_arrayXs[i]: "<<ptr_arrayXs[i];
//        cout<<", arrayAnhos[i]: "<<arrayAnhios[i];
//        cout<<", ptr_arrayYs[i]: "<<ptr_arrayYs[i];
//        cout<<endl;
    }
    
    
    this->nDats=tamDats;
    this->calcularDerivadaConLagrange();
//    cout<<"Polinomio: ";
//    this->obj_polyLagrng.imprimirPolinomio();
//    cout<<endl;
}


ProblemaPoblacionL::~ProblemaPoblacionL() {
    this->~Derivada_Lagrange();
    free(arrayAnhios);
    arrayAnhios=NULL;
}

void ProblemaPoblacionL::pedirAnhio(){
    int idAnhio=0;
    while(true)
    {
        
        cout<<"Por favor escoja el año digitando del array escogido acontinuación (-1 para salir):"<<endl;
        for(int i=0; i<this->nDats;i++)
        {
            cout<<"["<<i<<"]"<<": "<<this->arrayAnhios[i]<<", ";
        }
        cout<<endl;
        cout<<"Seleccione el año: ";
        cin>>idAnhio;
        if(idAnhio<0 || idAnhio>10) continue;
        if(idAnhio==-1) break;
        else {
            long double x=ptr_arrayXs[idAnhio];
            long double derivNum=this->evaluarDerivada(x);
            long double derivTeo=this->derivadaFuncion(x);
            cout<<"-----------------------_Respuesta!!------------------------------"<<endl;
            printf("X= %#8.1Le  F'(x)aprox: %#8.10Le, F'(x): %#8.10Le, ErrorVerd: %#8.10Le\n", 
                    x, derivNum, derivTeo, this->getError());
            cout<<"-----------------------FIN_Respuesta!!------------------------------"<<endl;

        }
    }
    
}

long double ProblemaPoblacionL::funcion(long double x){
    long double p;
    long double t=(long double)x;
    p = 165*exp(0.02*t);
    
    return p;
}

long double ProblemaPoblacionL::derivadaFuncion(long double x){
    long double output=0;
    output= (3.3)*exp(0.02*x);
    return output;
}

long double ProblemaPoblacionL::derivadaDosFuncion(long double x){
    long double output=0;
    output=0.066*exp(0.02*x);
    return output;
}